3.0.1 ES5 实现 const

const 有什么特征,常量: 只读的常量。一旦声明,常量的值就不能改变。
就是要设置一个变量的描述对象属性 writable: false, configurable: false

  • 1.获取一个对象属性的 描述对象

属性的可枚举性和遍历

let b = {a:1}

Object.getOwnPropertyDescriptor(b, 'a');
// {value: 1, writable: true, enumerable: true, configurable: true}

1
2
3
4
5
  • 2.可以通过 Object.defineProperty 来实现
Object.defineProperty(CONST, "A", {
  value: 1,
  writable: false,        //设置属性只读
  configurable: false,    //设置属性不可配置
  enumerable: true
});




也看到 有的说使用 设置 setter 和 getter 函数

function setConst(name, value) {
  Object.defineProperty(window, name, {
    set(x) {
      throw new Error(`Assignment to constant variable ${name}`);
    },
    get() {
      return value;
    }
  })
}

setConst('name','jack');
name = 'rose';
//Uncaught Error: Assignment to constant variable name

参考:https://segmentfault.com/q/1010000008615502
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

参考